package Synchronized;

/**
 * 懒汉模式 线程不安全的解决方法
 */
public class SingletonMode3 {
    static volatile SingletonMode3 instance=null;

    private SingletonMode3() {
    }

    /**
     * 解决：
     * 1.把整个if()用synchronized包裹起来--保持其原子性
     * 2.锁外if()判断
     *    ---只有第一批调用方法的人需要锁的限制，后面一直都是安全的，不应该还有锁的限制---------锁是一个消耗比较大的操作
     * 3.给instance加volatile
     *    ---保证instance修改后，大家都能知道
     * @return
     */
    static SingletonMode3 getInstance(){
        if(instance==null){
            synchronized (SingletonMode3.class){
                if(instance==null){
                    instance=new SingletonMode3();
                }
            }
        }
        return instance;
    }
}
